package lexico;

import java.util.ArrayList;
import tabla_simbolos.Array;
import tabla_simbolos.Puntero;
import tabla_simbolos.Referencia;
import tabla_simbolos.Registro;
import tabla_simbolos.Procedimiento;
import tabla_simbolos.TipoBasico;
import tabla_simbolos.Variable;


public class Declaracion {
	/*Atributos*/
	public enum ClaseTabla{var, pvar, tipo, procedimiento};
	public enum Tipo{basico,ref,puntero, array, registro, proc,literal_booleano, literal_entero, literal_natural, literal_caracter,literal_real,literal_numerico};
	private ArrayList<String> pend;
	private ClaseTabla clase;
	private Tipo t;
	private String id;
	private Registro propsReg;
	private Puntero propsPunt;
	private Array propsArray;
	private Procedimiento propsProc;
	private Variable propsVar;
	private Referencia propsRef;
	private TipoBasico propsTBas;
	
	/*Constructora*/
	public Declaracion(String id){//Para los procedimientos
		this.setLexema(id);
		this.propsProc=new Procedimiento(Tipo.proc);
	}
	
	public Declaracion(String id,Tipo tipo,ArrayList<String> pend, Variable propsVar,Array propsArray, Puntero propsPunt, Referencia propsRef,Registro propsReg,TipoBasico propsTBas){//Para los tipos y las variables
		this.t=tipo;
		this.pend=pend;
		this.setLexema(id);
		this.propsVar=propsVar;
		this.propsArray=propsArray;
		this.propsPunt=propsPunt;
		this.propsRef=propsRef;
		this.propsReg=propsReg;
		this.propsTBas=propsTBas;
		
	}

	/*Get & Set*/
	public void setLexema(String id) {this.id = id;}
	public String getLexema() {return id;}
	public void setPropsReg(Registro propsReg) {this.propsReg = propsReg;}
	public Registro getPropsReg() {return propsReg;}
	public void setPropsPunt(Puntero propsPunt) {this.propsPunt = propsPunt;}
	public Puntero getPropsPunt() {return propsPunt;}
	public void setPropsArray(Array propsArray) {this.propsArray = propsArray;}
	public Array getPropsArray() {return propsArray;}
	public void setPropsProc(Procedimiento propsProc) {this.propsProc = propsProc;}
	public Procedimiento getPropsProc() {return propsProc;}
	public void setPropsVar(Variable propsVar) {this.propsVar = propsVar;}
	public Variable getPropsVar() {return propsVar;}
	public void setTipotabla(ClaseTabla tipo) {this.clase = tipo;}
	public ClaseTabla getTipotabla() {return clase;}
	public Tipo getTipo(){return t;}
	public void setPend(ArrayList<String> pend) {this.pend = pend;}
	public ArrayList<String> getPend(){return pend;}
	public Referencia getPropsRef() {return propsRef;}
	public void setPropsRef(Referencia propsRef) {this.propsRef = propsRef;}
	public void setPropsTBas(TipoBasico tbase) {this.propsTBas=tbase;	}
	public TipoBasico getPropsTBas(){return this.propsTBas;}
	
}
